//
// Created by Toosan on 2022/4/26.
//
#include "iostream"

using namespace std;

class FragmentActivity {
public:
    FragmentActivity() = default;;

    /**
     * 加上 virtual 开启多态   虚函数
     */
    virtual void onStop() {
        cout << "FragmentActivity onStop" << endl;
    }
};

class MainActivity : public FragmentActivity {
public:
    MainActivity() : FragmentActivity() {};

    void onStop() {
        cout << "MainActivity onStop" << endl;
    }
};

/**
 * 为什么一定要传地址才行？
 * @param fragmentActivity
 */
void createActivity(FragmentActivity *fragmentActivity) {
    fragmentActivity->onStop();
}
/**
 * 多态
 * 回顾一下多态的定义，什么是多态
 * 程序的角度：当程序运行时，才知道调用哪个类的方法(动态多态  重写？)， 编译期就已经知道调用哪个函数（静态多态  重载？）
 * 八股文：父类引用指向子类对象 (同一个方法不同的实现)
 * @return
 */
int main() {
    MainActivity mainActivity;
    //
    /**
     * C++默认关闭了多态， 这里Java一定会执行子类的方法，但C++还是执行的父类方法，因为关闭了多态
     * 如何开启多态，在父类的函数前加上虚函数关键字就可以了
     *  virtual void onStop()    virtual
     */
    createActivity(&mainActivity);
    return 0;
}
